/**
* @file storage_image.cpp
*
*	 Nel file storage_image.cpp vengono implementate tutte le funzionalità descritte nel 
*	 file storage_image.h
*	 In particolare si implementa il servizio che consiste nella ricezione di un'immagine 
*	 da parte del client.
*
* @author Favale Angelo
* @author Fagioli Alessio
*
* @version 1.0
*/

#include "storage_image.h"

/** Contiene il nome del servizio a cui fa riferimento la classe che lo gestisce */
char servizio_1[BUFFER_SIZE] = "Storage_Image";

bool Storage_Image::Store_image (char * nome_file, int len_file){

	char buffer[BUFFER_SIZE];
	FILE *f;
	int i,n;
	
	//printf("In Store_image scrivo il file %s\n",nome_file);
	f=fopen(nome_file,"wb");
	if(f==NULL)
	{			
		printf("Errore apertura file\n");
		return false;
	}
	
	memset(buffer,0,BUFFER_SIZE);
	
	n=0;

	while(n<len_file)
	{
		i=recv(client.s,buffer,BUFFER_SIZE,0);
		fwrite(buffer,1,i,f);
		n+=i;		
	}			

	fclose(f);

	return true;
}

/*bool Storage_Image::check_image(List_Image * lista, char * nome_file)
{

return( lista->exist_image(nome_file));

}*/

/////////// SERVICE STORAGE_IMAGE ////////////////////////

Storage_Image::Storage_Image(host client):Service(client,servizio_1)
{


	
	/*strcpy(this->name,"Storage_Image");
	strcpy(this->client.ip,client.ip);
	this->client.porta=client.porta;
	this->client.s=client.s;*/

	//risp=new Response_Storage_Image(client,0); //costruttore di Response_Storage_Image
	//first=NULL;

	//inizializzo struttura parametri
	

	/*
	struct Parameter *p;
	p=new (struct Parameter);	
	p->way=IN;
	p->t=STRING;
	first_param=p;
	p->next=NULL;
	
	
	p=new (struct Parameter);
	first_param->next=p;
	p->way=OUT;
	p->t=BUFFER;
	p->next=NULL;*/
	/////////////////////////////////

}

